'use strict';

const tokenList = 'aisLoginUserList:';

/**
 * 挂在 扩展方法到 app对象上
 */
module.exports = {
    // jwt 获取token信息
    async getToken(userInfo) {
        // token bean
        const tokenBean = {
            id: userInfo.id,
            realName: userInfo.realName,
            branchCode: userInfo.branchCode,
            timeStamp: Date.now()
        };
        // 秘钥
        const secret = this.config.myJwt.secret;
        // 可选参数
        const options = {
            expiresIn: this.config.myJwt.expiresIn
        };
        // 进行签名，获得token
        const token = this.jwt.sign(tokenBean, secret, options);
        // 将此对象存入redis中
        userInfo.token = token;
        // 将token存入 redis 服务器。
        await this.redis.set(tokenList + userInfo.id, JSON.stringify(userInfo));
        // this.logger.debug('生成token：', token);
        return token;
    },
    // 校验token信息
    async checkToken(token) {
        // this.logger.debug('token信息；', token);
        // 校验token是否正确
        const tokenInfo = this.jwt.verify(token, this.config.myJwt.secret);

        this.logger.debug('是否开启单点登陆:', this.config.isSingleLoagin);

        let redisToken = await this.redis.get(tokenList + tokenInfo.id);

        redisToken = JSON.parse(redisToken);

        // this.logger.debug('redisToken:', redisToken);

        // 是否启动单点登陆
        if (this.config.isSingleLoagin) {
            if (redisToken && redisToken.token == token) {
                return redisToken;
            }
            return null;
        }
        return redisToken;
    }
};
